package indi.zhang.framework.config;

import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
import cn.dev33.satoken.interceptor.SaRouteInterceptor;
import indi.zhang.framework.tools.StringToEnumConverterFactory;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author jy
 * @since 2021-11-08 15:32
 */
public class SaTokenConfigure implements WebMvcConfigurer {

	private static final String[] URL_WHITELIST = {
			"/api/v1/login/login", "/api/v1/account/verificationCode","/api/v1/test/**",
			"/favicon.ico",
			"/webjars/**",
			"/img.icons/**",
			"/swagger-resources/**",
			"/v3/api-docs/**",
			"/swagger-ui/**",
			"/doc.html",
	};

	// 注册Sa-Token的注解拦截器，打开注解式鉴权功能
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 注册注解拦截器，并排除不需要注解鉴权的接口地址 (与登录拦截器无关)
		registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
		// 注册Sa-Token的路由拦截器
		registry.addInterceptor(new SaRouteInterceptor())
				.addPathPatterns("/**")
				.excludePathPatterns(URL_WHITELIST);
	}

	@Override
	public void addFormatters(FormatterRegistry registry) {
		registry.addConverterFactory(new StringToEnumConverterFactory());
	}

}
